QuickSight の制限付き共有フォルダのサブフォルダが「An error occurred (PreconditionNotMetException) when calling the DeleteFolder operation: folder not empty」で削除できなくなった
コーヒーが好きな emi です。
先日、QuickSight の制限付き共有フォルダがサブフォルダをサポートしました。
上記ブログで検証後フォルダを削除しようとしたところ、以下のエラーで削除できませんでした。
An error occurred (PreconditionNotMetException) when calling the DeleteFolder operation: folder not empty
試行錯誤して削除に成功しましたので手順を紹介します。
はじめに結論
以下の手順で削除できました。
- AWS CLI コマンド list-folder-members でどのアセットが残ってしまっているか確認する
- AWS CLI コマンドで残っているアセットへ削除権限を付与する
- 残ってしまっているアセットを削除する
- 制限付き共有フォルダを削除する
詳細
削除できない事象の再現
制限付き共有フォルダの削除 を参考に制限付き共有フォルダのサブフォルダ削除を行います。
[アップデート] QuickSight 制限付き共有フォルダがサブフォルダをサポートしました | DevelopersIO で作成したサブフォルダを削除します。以下のように、QuickSight コンソールからサブセット内のアセットは削除済みです。
list-folders コマンドでサブフォルダのフォルダ ID を取得します。
aws quicksight list-folders \
--aws-account-id 123456789012
▼実行結果
[cloudshell-user@ip-10-130-40-84 ~]$ aws quicksight list-folders \
> --aws-account-id 123456789012
{
"FolderSummaryList": [
{
:
:
},
{
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/9e740b22-b78f-4115-8307-032d3c48bc2f",
"FolderId": "9e740b22-b78f-4115-8307-032d3c48bc2f",
"Name": "sub-folder",
"FolderType": "RESTRICTED",
"CreatedTime": "2024-10-18T03:53:41.553000+00:00",
"LastUpdatedTime": "2024-10-18T06:51:11.832000+00:00",
"SharingModel": "ACCOUNT"
},
{
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/shared_restricted_folder_for_test-group",
"FolderId": "shared_restricted_folder_for_test-group",
"Name": "Shared restricted folder for test-group",
"FolderType": "RESTRICTED",
"CreatedTime": "2024-10-18T03:44:50.613000+00:00",
"LastUpdatedTime": "2024-10-18T06:31:14.812000+00:00",
"SharingModel": "ACCOUNT"
}
],
"Status": 200,
"RequestId": "25e9c32c-1dbe-40fb-9180-ae2bcecbead9"
}
[cloudshell-user@ip-10-130-40-84 ~]$
サブフォルダのフォルダ ID が 9e740b22-b78f-4115-8307-032d3c48bc2f
であることが分かりました。
delete-folder コマンドでサブフォルダの削除を試みます。
aws quicksight delete-folder \
--aws-account-id 123456789012 \
--folder-id 9e740b22-b78f-4115-8307-032d3c48bc2f
▼実行結果
[cloudshell-user@ip-10-130-40-84 ~]$ aws quicksight delete-folder \
> --aws-account-id 123456789012 \
> --folder-id 9e740b22-b78f-4115-8307-032d3c48bc2f
An error occurred (PreconditionNotMetException) when calling the DeleteFolder operation: folder not empty
[cloudshell-user@ip-10-130-40-84 ~]$
An error occurred (PreconditionNotMetException) when calling the DeleteFolder operation: folder not empty
日本語訳:DeleteFolder オペレーションでエラーが発生しました。(前提条件が満たされていない例外)フォルダーが空ではありません。
さて、「フォルダが空ではない」となってしまいました。何か見えないアセットが残っているのかもしれません。
list-folder-members コマンドで見えないアセットを確認する
list-folder-members コマンドを使うとフォルダ内のすべてのアセットを表示できますので、実行します。
aws quicksight list-folder-members \
--aws-account-id 123456789012 \
--folder-id 9e740b22-b78f-4115-8307-032d3c48bc2f
▼実行結果
[cloudshell-user@ip-10-130-40-84 ~]$ aws quicksight list-folder-members \
> --aws-account-id 123456789012 \
> --folder-id 9e740b22-b78f-4115-8307-032d3c48bc2f
{
"FolderMemberList": [
{
"MemberId": "16dc667d-1884-4c90-babc-be93f7721943",
"MemberArn": "arn:aws:quicksight:ap-northeast-1:123456789012:datasource/16dc667d-1884-4c90-babc-be93f7721943"
}
],
"Status": 200,
"RequestId": "7f9eac34-84a4-411a-8076-23c0e8aec0c3"
}
[cloudshell-user@ip-10-130-40-84 ~]$
おお。コンソールからは見えませんが、データソースが残っているようです。
データソースの編集 を見ると、新しいデータセットの作成画面からデータソースが編集できるようですが、見つかりません。
list-data-sources コマンドでもう少しこのデータソースについて見てみます。
aws quicksight list-data-sources \
--aws-account-id 123456789012
▼実行結果
[cloudshell-user@ip-10-130-40-84 ~]$ aws quicksight list-data-sources \
> --aws-account-id 123456789012
{
"DataSources": [
{
:
:
},
:
:
},
{
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:datasource/16dc667d-1884-4c90-babc-be93f7721943",
"DataSourceId": "16dc667d-1884-4c90-babc-be93f7721943",
"Name": "1700_sweets_with_status.csv",
"Type": "FILE",
"CreatedTime": "2024-10-18T03:57:21.322000+00:00",
"LastUpdatedTime": "2024-10-18T03:57:21.637000+00:00"
},
{
:
:
}
],
"Status": 200,
"RequestId": "d4273ef4-150a-42cf-b210-233a90b64e25"
}
[cloudshell-user@ip-10-130-40-84 ~]$
なるほど、1700_sweets_with_status.csv
という名前のデータソースが残っているようです。データソース ID も 16dc667d-1884-4c90-babc-be93f7721943
とわかりました。
describe-data-source-permissions コマンドで、このデータソース 1700_sweets_with_status.csv
に付与された権限を確認します。
aws quicksight describe-data-source-permissions \
--aws-account-id 123456789012 \
--data-source-id 16dc667d-1884-4c90-babc-be93f7721943
▼実行結果
[cloudshell-user@ip-10-130-40-84 ~]$ aws quicksight describe-data-source-permissions \
> --aws-account-id 123456789012 \
> --data-source-id 16dc667d-1884-4c90-babc-be93f7721943
{
"Status": 200,
"DataSourceArn": "arn:aws:quicksight:ap-northeast-1:123456789012:datasource/16dc667d-1884-4c90-babc-be93f7721943",
"DataSourceId": "16dc667d-1884-4c90-babc-be93f7721943",
"Permissions": [],
"RequestId": "860c2161-bd51-4502-9b56-c898a867647c"
}
[cloudshell-user@ip-10-130-40-84 ~]$
"Permissions": []
という空の配列が返されています。これはこのデータソースに対してアクセス権限が付与されていない、つまり、現在このデータソースにアクセスできるユーザーやグループは存在しないということを意味しています。そんな状態になってしまうのか……
アセットへのアクセス権限を付与
では、誰もアクセスできないこのデータソース 1700_sweets_with_status.csv
に update-data-source-permissions コマンドで権限を付与します。
QuickSight の権限付与系のコマンドは横に長くなりがちなので、CLI スケルトンを利用します。詳細は以下ブログを参照ください。
まずは update-data-source-permissions
コマンドの CLI スケルトンファイルのひな形を作成します。
aws quicksight update-data-source-permissions \
--generate-cli-skeleton > update-data-source-permissions.json
▼実行結果
[cloudshell-user@ip-10-130-40-84 ~]$ aws quicksight update-data-source-permissions \
> --generate-cli-skeleton > update-data-source-permissions.json
[cloudshell-user@ip-10-130-40-84 ~]$
cat
コマンドで update-data-source-permissions.json
の中身を確認すると、以下のようになっています。
[cloudshell-user@ip-10-130-40-84 ~]$ cat update-data-source-permissions.json
{
"AwsAccountId": "",
"DataSourceId": "",
"GrantPermissions": [
{
"Principal": "",
"Actions": [
""
]
}
],
"RevokePermissions": [
{
"Principal": "",
"Actions": [
""
]
}
]
}
[cloudshell-user@ip-10-130-40-84 ~]$
今回は DataAnalysisUser1
というユーザーが所属している test-group
というグループが、データソース 1700_sweets_with_status.csv
にアクセスできるよう権限を付与していきます。
権限を付与したいグループの ARN を list-groups コマンドで取得します。
aws quicksight list-groups \
--aws-account-id 123456789012 \
--namespace default
▼実行結果
[cloudshell-user@ip-10-130-40-84 ~]$ aws quicksight list-groups \
> --aws-account-id 123456789012 \
> --namespace default
{
"GroupList": [
{
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/test-group",
"GroupName": "test-group",
"Description": "test-group",
"PrincipalId": "group/d-956747a400/7d75c34e-667b-41ed-9a29-b685b3f87a78"
}
],
"Status": 200,
"RequestId": "23667b47-5bb6-4f23-a4fb-4dbb71f62dee"
}
[cloudshell-user@ip-10-130-40-84 ~]$
test-group
の ARN が arn:aws:quicksight:ap-northeast-1:123456789012:group/default/test-group
と分かりました。
update-data-source-permissions.json
を以下のように編集します。
{
"AwsAccountId": "123456789012",
"DataSourceId": "16dc667d-1884-4c90-babc-be93f7721943",
"GrantPermissions": [
{
"Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/test-group",
"Actions": [
"quicksight:UpdateDataSourcePermissions",
"quicksight:DescribeDataSourcePermissions",
"quicksight:PassDataSource",
"quicksight:DescribeDataSource",
"quicksight:DeleteDataSource",
"quicksight:UpdateDataSource"
]
}
]
}
これは、"Principal"
に設定したグループのユーザーが、データソースに関する操作 "Actions"
を実行できる権限を付与する JSON ファイルです。
今回は削除だけできればいいのですが、検証なのでデータソースに関するアクションを諸々付与するように JSON を作ってみました。
では、update-data-source-permissions コマンドで権限を付与します。
aws quicksight update-data-source-permissions \
--cli-input-json file://update-data-source-permissions.json
▼実行結果
[cloudshell-user@ip-10-130-40-84 ~]$ aws quicksight update-data-source-permissions \
> --cli-input-json file://update-data-source-permissions.json
{
"Status": 200,
"DataSourceArn": "arn:aws:quicksight:ap-northeast-1:123456789012:datasource/16dc667d-1884-4c90-babc-be93f7721943",
"DataSourceId": "16dc667d-1884-4c90-babc-be93f7721943",
"RequestId": "f9e67593-9802-4b32-85ff-6bdbf2f8e703"
}
[cloudshell-user@ip-10-130-40-84 ~]$
権限が付与されたか describe-data-source-permissions コマンドで確認します。
aws quicksight describe-data-source-permissions \
--aws-account-id 123456789012 \
--data-source-id 16dc667d-1884-4c90-babc-be93f7721943
▼実行結果
[cloudshell-user@ip-10-130-40-84 ~]$ aws quicksight describe-data-source-permissions \
> --aws-account-id 123456789012 \
> --data-source-id 16dc667d-1884-4c90-babc-be93f7721943
{
"Status": 200,
"DataSourceArn": "arn:aws:quicksight:ap-northeast-1:123456789012:datasource/16dc667d-1884-4c90-babc-be93f7721943",
"DataSourceId": "16dc667d-1884-4c90-babc-be93f7721943",
"Permissions": [
{
"Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/test-group",
"Actions": [
"quicksight:PassDataSource",
"quicksight:DescribeDataSourcePermissions",
"quicksight:UpdateDataSource",
"quicksight:UpdateDataSourcePermissions",
"quicksight:DescribeDataSource",
"quicksight:DeleteDataSource"
]
}
],
"RequestId": "a2c00951-dd90-4365-9bf4-bf2b8aa4b559"
}
[cloudshell-user@ip-10-130-40-84 ~]$
いいですね。権限が付与できました。
残っているアセットの削除
では、test-group
グループに所属しているユーザー DataAnalysisUser1 で、delete-data-source コマンドを使いデータソースを削除します。
aws quicksight delete-data-source \
--aws-account-id 123456789012 \
--data-source-id 16dc667d-1884-4c90-babc-be93f7721943
▼実行結果
[cloudshell-user@ip-10-130-49-175 ~]$ aws quicksight delete-data-source \
> --aws-account-id 123456789012 \
> --data-source-id 16dc667d-1884-4c90-babc-be93f7721943
{
"Status": 200,
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:datasource/16dc667d-1884-4c90-babc-be93f7721943",
"DataSourceId": "16dc667d-1884-4c90-babc-be93f7721943",
"RequestId": "163347f8-c7ab-4e91-a2ab-3a845554cebc"
}
[cloudshell-user@ip-10-130-49-175 ~]$
"Status": 200
が返ってきており、無事成功していそうです。
list-folder-members
コマンドで、サブフォルダーの中が空か確認します。
aws quicksight list-folder-members \
--aws-account-id 123456789012 \
--folder-id 9e740b22-b78f-4115-8307-032d3c48bc2f
▼実行結果
[cloudshell-user@ip-10-130-40-84 ~]$ aws quicksight list-folder-members \
> --aws-account-id 123456789012 \
> --folder-id 9e740b22-b78f-4115-8307-032d3c48bc2f
{
"FolderMemberList": [],
"Status": 200,
"RequestId": "50be3418-dafb-40cf-97a4-b32ebb6e2dde"
}
[cloudshell-user@ip-10-130-40-84 ~]$
"FolderMemberList": []
という空の配列が返されています。サブフォルダの中身は空になりました。
サブフォルダの削除
今度こそサブフォルダを削除できるか再チャレンジします。
aws quicksight delete-folder \
--aws-account-id 123456789012 \
--folder-id 9e740b22-b78f-4115-8307-032d3c48bc2f
▼実行結果
[cloudshell-user@ip-10-130-40-84 ~]$ aws quicksight delete-folder \
> --aws-account-id 123456789012 \
> --folder-id 9e740b22-b78f-4115-8307-032d3c48bc2f
{
"Status": 200,
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/9e740b22-b78f-4115-8307-032d3c48bc2f",
"FolderId": "9e740b22-b78f-4115-8307-032d3c48bc2f",
"RequestId": "6675d743-58ae-4eb7-9a03-6d4c97206d68"
}
[cloudshell-user@ip-10-130-40-84 ~]$
コマンドが成功しました。QuickSight コンソールを見ると、サブフォルダが消えています!
これで、親の制限付き共有フォルダも消せるはずです。親フォルダも削除します。
aws quicksight delete-folder \
--aws-account-id 123456789012 \
--folder-id shared_restricted_folder_for_test-group
▼実行結果
[cloudshell-user@ip-10-130-40-84 ~]$ aws quicksight delete-folder \
> --aws-account-id 123456789012 \
> --folder-id shared_restricted_folder_for_test-group
{
"Status": 200,
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/shared_restricted_folder_for_test-group",
"FolderId": "shared_restricted_folder_for_test-group",
"RequestId": "dc5f544f-c8a3-484f-9e9c-f7c752a49da1"
}
[cloudshell-user@ip-10-130-40-84 ~]$
すべての制限付き共有フォルダが削除できました。